#ifndef __MVS_IOTC_BINDING_H__
#define __MVS_IOTC_BINDING_H__

#include "mvdef.h"

MVCXX_EXTERN_BEGIN

/*******************************************
 * 
 *             QRcode配网方式
 * 
 ******************************************/
/* QRCode方式绑定信息传入启动绑定流程 */
mv_s32_t  mvs_iotc_qrcode_binding(mv_cv8ptr_t cpv8_qrcode_info, mv_s32_t s32_len);

/*******************************************
 * 
 *              BLE配网方式
 * 
 ******************************************/
typedef enum _ble_netcfg_state_code
{
    BLE_NC_SC_INVALID          = 0,
    BLE_NC_SC_DATA_COLECTING   = 1, ///< 配置信息收集中(SDK内部使用，外部不需要设置此状态)
    BLE_NC_SC_NET_CONNECTING   = 2, ///< 网络连接中
    BLE_NC_SC_NET_CONNECTED    = 3, ///< 网络连接完成
    BLE_NC_SC_BINDING          = 4, ///< 账号绑定中
    BLE_NC_SC_CFG_FIN          = 5, ///< 配置完成

    BLE_NC_SC_NET_ERR_PWD      = 101,///< 网络连接失败-密码错误
    BLE_NC_SC_NET_ERR_TIMEOUT  = 102,///< 网络连接失败-连接超时
    BLE_NC_SC_BIND_ERR_FAILED  = 103,///< 账号绑定失败-异常
    BLE_NC_SC_BIND_ERR_TIMEOUT = 104,///< 账号绑定失败-超时
}ble_nc_sc_e;

typedef mv_s32_t(*pf_ble_msg_send)(mv_u8ptr_t pu8_msg, mv_u32_t u32_len, mv_vptr_t p_usr_dat);
typedef struct _ble_netcfg_param
{
    pf_ble_msg_send   f_ble_msg_send; ///< BLE消息发送接口
    mv_u16_t          u16_size_mpp;   ///< 单包最大长度（字节）
    mv_u8_t           u8_btcom;       ///< WiFi与BLE共存（0=不支持；1=支持）
    mv_vptr_t         p_usr_dat;      ///< 用户数据
}mvs_ble_nc_par_t;

/**
 * @brief 初始化BLE配网绑定功能
 * 
 * @param pst_init [in] 初始化配置
 * @return 初始化操作结果
 * - success : MV_EC_SUCCESS
 * -  failed : MV_EC_REDEF        (已初始化，重复初始化)
 *             MV_EC_INVALID_ARGS (非法参数)
 *             MV_EC_NOT_SUPPORT  (ability配置不支持蓝牙绑定通道)
 *             MV_EC_IGNORE       (已绑定，无需初始化)
 * 
 * @note 需要在"mvs_iotc_service_init"后才能调用
 */
mv_s32_t mvs_iotc_ble_nc_init(mvs_ble_nc_par_t *pst_init);
/**
 * @brief 注销BLE配网绑定功能
 * 
 * @return 注销操作结果
 * - success : MV_EC_SUCCESS
 * -  failed : MV_EC_NOT_INIT    (未初始化)
 */
mv_s32_t mvs_iotc_ble_nc_uninit();
/**
 * @brief 当前状态更新
 * 
 * @param u8_state [in] 当前状态 [ble_nc_sc_e]
 * @return 更新操作结果
 * - success : MV_EC_SUCCESS
 * -  failed : MV_EC_NOT_INIT    (未初始化)
 *             else             （状态通知失败）
 * 
 * @note 非必要关心返回值
 */
mv_s32_t mvs_iotc_ble_nc_state_update(mv_u8_t u8_state);
/**
 * @brief BLE配网数据处理
 * 
 * @param pu8_dat [in] 报文数据
 * @param u32_len [in] 数据长度
 * @return 数据处理结果
 * - success : MV_EC_SUCCESS
 * -  failed : MV_EC_INVALID_ARGS (非法参数)
 *             MV_EC_IGNORE       (非配网数据报文)
 *             MV_EC_ABORT        (数据处理异常)
 * 
 * @note 非必要关心返回值
 */
mv_s32_t mvs_iotc_ble_nc_process(mv_u8ptr_t pu8_dat, mv_u32_t u32_len);

MVCXX_EXTERN_END

#endif
